package com.xiaoxi.xirpc.registry;

import com.xiaoxi.xirpc.config.RegistryConfig;
import com.xiaoxi.xirpc.model.ServiceMetaInfo;

import java.util.List;

/**
 *  注册中心
 */
public interface Registry {

    /**
     *  初始化
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     *  注册服务（服务提供端）
     * @param serviceMetaInfo
     */
    void register(ServiceMetaInfo serviceMetaInfo);

    /**
     * 注销服务（服务提供端）
     * @param serviceMetaInfo
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     *  心跳检测 （服务提供端）
     */
    void heartBeat();

    /**
     *  服务发现，获取某服务所有节点 （服务消费端）
     * @param serviceKey
     * @return
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     *  监听 （服务消费端）
     * @param serviceNodeKey
     */
    void watch(String serviceNodeKey);

    /**
     *  服务销毁
     */
    void destroy();
}
